import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;

public class AngelDaoGenerator {
	static Schema schema;

	public static void main(String[] args) throws Exception {
		schema = new Schema(3, "nrtech.br.com.angel.dao");

		addAgencia();
		addBanco();
		addCartao();
		addConfig();
		addContaBanco();
		addCotacoes();
		addDocumento();
		addFonte();
		addFontesFormasPagto();
		addFormasPagto();
		addGrupoLancto();
		addHistCartao();
		addInvestimento();
		addLancamento();
		addTipoLancamento();
		addTipoDocto();
		addTitulares();
		addAlarme();

		new DaoGenerator().generateAll(schema, "../Angel/src");
	}

	private static void addAgencia() {
		Entity agencia = schema.addEntity("Agencia");
		agencia.addIdProperty();
		agencia.addIntProperty("idBanco");
		agencia.addStringProperty("numero");
		agencia.addStringProperty("endereco");
		agencia.addBooleanProperty("ativa");
	}

	private static void addBanco() {
		Entity banco = schema.addEntity("Banco");
		banco.addIdProperty();
		banco.addStringProperty("numero");
		banco.addStringProperty("nome");
		banco.addBooleanProperty("ativo");
	}

	private static void addCartao() {
		Entity cartao = schema.addEntity("Cartao");
		cartao.addIdProperty();
		cartao.addStringProperty("bandeira");
		cartao.addStringProperty("tipo");
		cartao.addStringProperty("numerosFinais");
		cartao.addStringProperty("nomeTitular");
		cartao.addIntProperty("idBanco");
		cartao.addIntProperty("idContaBanco");
		cartao.addIntProperty("idFonte");
		cartao.addStringProperty("situacao");
		cartao.addFloatProperty("valorAnuidade");
		cartao.addShortProperty("parcelasAnuidade");
		cartao.addFloatProperty("taxaMensal");
		cartao.addBooleanProperty("usoCancelaTaxa");
		cartao.addFloatProperty("limiteCredTotal");
		cartao.addFloatProperty("limiteSaqueTotal");
		cartao.addFloatProperty("jurosFinancto");
		cartao.addFloatProperty("jurosRotativo");
		cartao.addFloatProperty("limiteCredDisp");
		cartao.addFloatProperty("limiteSaqueDisp");
	}

	private static void addConfig() {
		Entity config = schema.addEntity("Config");
		config.addIdProperty();
		config.addStringProperty("senha");
		config.addBooleanProperty("ativarLembretes");
		config.addBooleanProperty("ativarAtualizacoesCotacoesInvest");
		config.addBooleanProperty("lembretesJanelas");
		config.addBooleanProperty("solicitacoesJanelas");
		config.addBooleanProperty("notifChamadas");
		config.addBooleanProperty("notifModoSilencioso");
		config.addStringProperty("versao");
		config.addStringProperty("tipoLicenca");
		config.addShortProperty("minutosRepetirAlarme");
	}

	private static void addContaBanco() {
		Entity contaBanco = schema.addEntity("ContaBanco");
		contaBanco.addIdProperty();
		contaBanco.addIntProperty("idAgencia");
		contaBanco.addStringProperty("tipoConta");
		contaBanco.addStringProperty("numero");
		contaBanco.addStringProperty("situacao");
		contaBanco.addDateProperty("dataAbertura");
		contaBanco.addDateProperty("dataEncerramento");
		contaBanco.addFloatProperty("valorAbertura");
		contaBanco.addFloatProperty("valorEncerramento");
		contaBanco.addFloatProperty("valorAtual");
	}

	private static void addCotacoes() {
		Entity cotacao = schema.addEntity("Cotacao");
		cotacao.addIdProperty();
		cotacao.addIntProperty("idInvestimento");
		cotacao.addDateProperty("data");
		cotacao.addFloatProperty("valorAnterior");
		cotacao.addFloatProperty("valorAtual");
		cotacao.addFloatProperty("variacao");
		cotacao.addStringProperty("tipoAtualizacao");
	}

	private static void addDocumento() {
		Entity docto = schema.addEntity("Documento");
		docto.addIdProperty();
		docto.addIntProperty("idTipoDocto");
		docto.addIntProperty("idLancamento");
		docto.addIntProperty("idBanco");
		docto.addIntProperty("idContaBanco");
		docto.addIntProperty("idCartao");
		docto.addIntProperty("idFonte");
		docto.addByteArrayProperty("imagem");
		docto.addBooleanProperty("liquidado");
		docto.addStringProperty("numero");
		docto.addFloatProperty("valorOriginal");
		docto.addDateProperty("dataVencto");
		docto.addDateProperty("dataPagto");
		docto.addShortProperty("numeroParcela");
		docto.addShortProperty("qtdeParcelas");
		docto.addBooleanProperty("geraLanctoPagto");
		docto.addFloatProperty("multaAtraso");
		docto.addFloatProperty("jurosMora");
		docto.addStringProperty("obs");
	}

	private static void addFonte() {
		Entity fonte = schema.addEntity("Fonte");
		fonte.addIdProperty();
		fonte.addStringProperty("nome");
		fonte.addStringProperty("tipo");
		fonte.addStringProperty("descricao");
		fonte.addStringProperty("frequencia");
		fonte.addStringProperty("endereco");
		fonte.addStringProperty("telefone");
		fonte.addStringProperty("contato");
	}

	private static void addFontesFormasPagto() {
		Entity fonteForma = schema.addEntity("FontesFormasPagto");
		fonteForma.addIdProperty();
		fonteForma.addIntProperty("idFonte");
		fonteForma.addIntProperty("idFormaPagto");
	}

	private static void addFormasPagto() {
		Entity forma = schema.addEntity("FormaPagto");
		forma.addIdProperty();
		forma.addStringProperty("nome");
	}

	private static void addGrupoLancto() {
		Entity grupo = schema.addEntity("GrupoLancto");
		grupo.addIdProperty();
		grupo.addIntProperty("idSuperior");
		grupo.addStringProperty("nome");
		grupo.addStringProperty("descricao");
		grupo.addStringProperty("cor");
		grupo.addBooleanProperty("ativo");
	}

	private static void addHistCartao() {
		Entity hist = schema.addEntity("HistCartao");
		hist.addIdProperty();
		hist.addIntProperty("idCartao");
		hist.addDateProperty("data");
		hist.addFloatProperty("jurosRotativo");
		hist.addFloatProperty("jurosFinancto");
	}

	private static void addInvestimento() {
		Entity inv = schema.addEntity("Investimento");
		inv.addIdProperty();
		inv.addIntProperty("idBanco");
		inv.addIntProperty("idAgencia");
		inv.addIntProperty("idContaBanco");
		inv.addIntProperty("idFonte");
		inv.addStringProperty("tipoInvest");
		inv.addStringProperty("nome");
		inv.addBooleanProperty("geraLancto");
		inv.addStringProperty("tipoPeriod");
		inv.addFloatProperty("cotacaoAtual");
		inv.addFloatProperty("valorInvestido");
		inv.addStringProperty("urlCotacao");
		inv.addShortProperty("diaAtualizacao");
		inv.addStringProperty("horaAtualizacao");
		inv.addBooleanProperty("atualizacaoManual");
	}

	private static void addLancamento() {
		Entity lanc = schema.addEntity("Lancamento");
		lanc.addIdProperty();
		lanc.addIntProperty("idTipo");
		lanc.addIntProperty("idGrupo");
		lanc.addStringProperty("nome");
		lanc.addStringProperty("descricao");
		lanc.addIntProperty("idFonte");
		lanc.addIntProperty("idBanco");
		lanc.addIntProperty("idAgencia");
		lanc.addIntProperty("idContaBanco");
		lanc.addIntProperty("idInvestimento");
		lanc.addIntProperty("idCartao");
		lanc.addIntProperty("idDocumento");
		lanc.addFloatProperty("valorOriginal");
		lanc.addDateProperty("dataVencto");
		lanc.addDateProperty("dataPagto");
		lanc.addFloatProperty("valorPago");
		lanc.addShortProperty("numeroParcela");
		lanc.addShortProperty("qtdeParcelas");
		lanc.addIntProperty("idLanctoPrincipal");
		lanc.addStringProperty("tipoPeriod");
		lanc.addShortProperty("diaVencto");
		lanc.addStringProperty("diasSemanaDesconsiderar");
		lanc.addBooleanProperty("valorVariavel");
		lanc.addFloatProperty("multaAtraso");
		lanc.addFloatProperty("jurosMora");
		lanc.addShortProperty("diasLimitePagto");
		lanc.addDateProperty("dataLimitePagto");
		lanc.addDateProperty("dataCadastro");
		lanc.addStringProperty("situacao");
		lanc.addStringProperty("dataHoraLembrete");
		lanc.addStringProperty("cor");
	}

	private static void addTipoLancamento() {
		Entity tipo = schema.addEntity("TipoLancamento");
		tipo.addIdProperty();
		tipo.addStringProperty("nome");
		tipo.addStringProperty("cor");
	}

	private static void addTipoDocto() {
		Entity tipo = schema.addEntity("TipoDocto");
		tipo.addIdProperty();
		tipo.addStringProperty("nome");
	}

	private static void addTitulares() {
		Entity titular = schema.addEntity("Titulares");
		titular.addIdProperty();
		titular.addStringProperty("nome");
		titular.addStringProperty("cpfCnpj");
		titular.addIntProperty("idContaBanco");
		titular.addBooleanProperty("principal");
		titular.addStringProperty("obs");
	}

	private static void addAlarme() {
		Entity alarme = schema.addEntity("Alarme");
		alarme.addIdProperty();
		alarme.addIntProperty("idLancamento");
		alarme.addIntProperty("idInvestimento");
		alarme.addStringProperty("nome");
		alarme.addBooleanProperty("ativo");
		alarme.addDateProperty("dataHoraOriginal");
		alarme.addDateProperty("dataHoraRepetir");
	}

}
